package com.wl.common.system.support.vo;


import com.wl.common.core.utils.tree.TreeNode;
import com.wl.common.core.web.dto.AbstractBaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * 菜单表
 *
 * @author wanglin
 * @since 2023-09-18
 */
@Data
@Schema(description = "菜单表")
public class SysMenuVO extends AbstractBaseVO implements TreeNode<String> {
    /**
     * 描述
     */
    @Schema(description = "描述")
    private String description;
    /**
     * 图标
     */
    @Schema(description = "图标")
    private String icon;
    /**
     * 是否受控制，默认1-受控，0-不受控；不受控的菜单，所有人都可以访问
     */
    @Schema(description = "是否受控制，默认1-受控，0-不受控；不受控的菜单，所有人都可以访问")
    private Integer isControlled;
    /**
     * 是否隐藏，默认0显示，1隐藏
     */
    @Schema(description = "是否隐藏，默认0显示，1隐藏")
    private Integer isHidden;
    /**
     * 菜单级数:1,2,3
     */
    @Schema(description = "菜单级数:1,2,3")
    private Integer level;
    private String levelName;

    /**
     * 菜单名称
     */
    @Schema(description = "菜单名称")
    private String name;
    /**
     * 排序号
     */
    @Schema(description = "排序号")
    private Integer orderIndex;
    /**
     * 上级菜单id
     */
    @Schema(description = "上级菜单id")
    private String parentId;
    private String parentName;
    /**
     * 菜单路径
     */
    @Schema(description = "菜单路径")
    private String path;

    private List<SysMenuVO> children;

    @Schema(description = "操作权限列表")
    private List<SysResourceVO> rightsChildren;

    private String component;


    /**
     * 类型（M目录 C菜单 F按钮）
     */
    private String type;

    /**
     * 是否刷新（0刷新 1不刷新）
     */
//    private String isRefresh;

    /**
     * 路由参数
     */
    private String query;

    /**
     * 是否为外链（0是 1否）
     */
    private Integer isFrame;

    /**
     * 是否缓存（0缓存 1不缓存）
     */
    private Integer isCache;
    /**
     * 权限字符串
     */
    private String perms;

    private Integer status;

    @Override
    public String id() {
        return this.getId();
    }

    @Override
    public String parentId() {
        return this.getParentId();
    }

    @Override
    public Boolean root() {
        return StringUtils.isBlank(this.getParentId());
    }

    @Override
    public void setChildren(List children) {
        this.children = children;
    }

    @Override
    public List<? extends TreeNode<String>> getChildren() {
        return this.children;
    }
}